package com.huawei.od2024;

import com.huawei.od2024.utils.IOdealer;

import java.util.Arrays;
import java.util.LinkedList;

/**
 * 现有若干个会议，所有会议共享一个会议室，用数组表示各个会议的开始时间和结束时间，格式为:
 * [[会议1开始时间，会议1结束时间]，[会议2开始时间，会议2结束时间]
 * 请计算会议室占用时间段。
 * 输入描述
 * [[会议1开始时间，会议1结束时间]，[会议2开始时间，会议2结束时间]]
 * 备注:
 * 会议室个数范围:[1,100]
 * 会议室时间段:[1,24]
 * 输出描述
 * 输出格式预输入一致,具体请看用例
 * [[会议开始时间，会议结束时间]，[会议开始时间，会议结束时间]]
 * 示例1
 * 输入:
 * [[1,4], [2,5],[7,9], [14,18]]
 * 输出
 * [[1,5], [7,9],[14,18]]
 * 说明:
 * 时间段[1,4]和[2,5]重叠，合并为[1,5]
 * 示例2
 * 输入:
 * [[1,4],[4,5]]
 * 输出:
 * [[1,5]
 */
public class OD2024c9 implements Runnable{
    @Override
    public void run() {
        int[][] meetings = {{3,4}, {2,5},{7,14}, {13,18}};

        MergeMeetings(meetings);
    }

    public int[][] MergeMeetings(int[][] meetings){
        Arrays.sort(meetings,(a,b)->(a[0]-b[0]));
        LinkedList<int[]>result = new LinkedList<>();
        int[] begin = meetings[0];
        for (int i = 1; i < meetings.length; i++) {
            if (begin[1] >= meetings[i][0] && begin[1] <= meetings[i][1]) {
                begin[1] = meetings[i][1];
            } else if (begin[1] > meetings[i][1]) {
                // Do nothing
            } else {
                result.add(begin);
                begin = meetings[i];
            }
        }
        result.add(begin);

        int[][] return_data = new int[result.size()][2];
        for (int j = 0; j < result.size(); j++) {
            return_data[j][0] = result.get(j)[0];
            return_data[j][1] = result.get(j)[1];
        }
        IOdealer.pushStrOutput(Arrays.deepToString(return_data));
        return return_data;
    }
}
